package com.ruoyi.system.service.impl;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;

import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.system.domain.YzClassify;
import com.ruoyi.system.mapper.YzClassifyMapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.system.mapper.YzContentMapper;
import com.ruoyi.system.domain.YzContent;
import com.ruoyi.system.service.IYzContentService;

/**
 * 内容管理Service业务层处理
 * 
 * @author ruoyi
 * @date 2024-03-28
 */
@Service
public class YzContentServiceImpl implements IYzContentService 
{
    @Autowired
    private YzContentMapper yzContentMapper;

    @Autowired
    private YzClassifyMapper yzClassifyMapper;

    /**
     * 查询内容管理
     * 
     * @param contentId 内容管理主键
     * @return 内容管理
     */
    @Override
    public YzContent selectYzContentByContentId(Long contentId) {
        //根据传入的内容主键搜索该条内容
        YzContent yzContent = yzContentMapper.selectYzContentByContentId(contentId);
        //保存其分类id
        Long classifyId = yzContent.getContentClassify();
        //创建集合用于保存分类各级的分类id
        List<Long> contentClassify = new ArrayList<>();
        //将目前最后一级的分类id放入集合
        contentClassify.add(classifyId);
        //根据当前分类id搜索到分类详细信息
        YzClassify yzClassify = yzClassifyMapper.selectYzClassifyByClassifyId(classifyId);
        //如果不为空则证明分类存在，并把上一级（父ID）存入集合当中
        if(yzClassify != null) {
            Long parentId = yzClassify.getParentId();
            if (parentId != null) {;
                contentClassify.add(parentId);
            }
        }
        //将集合赋值给返回对象中
        yzContent.setContentClassifys(contentClassify);

        return yzContent;
    }

    /**
     * 查询内容管理列表
     * 
     * @param yzContent 内容管理
     * @return 内容管理
     */
    @Override
    public List<YzContent> selectYzContentList(YzContent yzContent, Date startTime, Date endTime) {
        //创建集合用于保存当前条件所有符合的分类id
        List<Long> classifyIdList = new ArrayList<>();
        //如果条件当中分类id不为空，则需要需要搜索其子分类，否则直接进行搜索
        if(yzContent != null && yzContent.getContentClassify() != null){
            //将当前分类的id加入其中
            classifyIdList.add(yzContent.getContentClassify());
            //搜索当前条件下分类的所有子分类
            List<YzClassify> yzClassifies = yzClassifyMapper.selectYzClassifyChildren(yzContent.getContentClassify());
            //如果此集合不为空，证明有传入为一级分类，搜索二级分类
            if(!yzClassifies.isEmpty()){
                //循环遍历集合把所有的分类id加入到集合中在where in 后遍历输出到sql中
                for (YzClassify yzClassify : yzClassifies) {
                    classifyIdList.add(yzClassify.getClassifyId());
                }
            }
        }
        return yzContentMapper.selectYzContentList(yzContent, classifyIdList, startTime, endTime);
    }

    /**
     * 新增内容管理
     * 
     * @param yzContentInfo 内容管理
     * @return 结果
     */
    @Override
    public int insertYzContent(Map<String, Object> yzContentInfo) {
        //前端一个json中既包含对象信息，又包含数组，使用Map接收后，把每个字段转化为对应的数据类型并创建对象给其赋值，数组取最后一位赋值给对象的分类id属性
        String contentTitle = (String) yzContentInfo.get("contentTitle");
        Long contentState = Long.valueOf(yzContentInfo.get("contentState").toString());
        List classifyIds = ((List<Long>) yzContentInfo.get("contentClassify"));
        Long contentClassify = Long.valueOf( classifyIds.get(classifyIds.size() - 1).toString());
        String contentText = (String) yzContentInfo.get("contentText");
        String contentPicture = (String) yzContentInfo.get("contentPicture");
        String contentPath = (String) yzContentInfo.get("contentPath");
        System.out.println("yzContentInfo = " + yzContentInfo);
        YzContent yzContent = new YzContent();
        yzContent.setContentClassify(contentClassify);
        yzContent.setContentPath(contentPath);
        yzContent.setContentPicture(contentPicture);
        yzContent.setContentText(contentText);
        yzContent.setContentState(contentState);
        yzContent.setContentTitle(contentTitle);
        //根据分类获取到类型，给content赋值
        YzClassify yzClassify = yzClassifyMapper.selectYzClassifyByClassifyId(yzContent.getContentClassify());
        yzContent.setContentType(yzClassify.getClassifyType());
        yzContent.setCreateTime(DateUtils.getNowDate());
        return yzContentMapper.insertYzContent(yzContent);
    }

    /**
     * 修改内容管理
     * 
     * @param yzContent 内容管理
     * @return 结果
     */
    @Override
    public int updateYzContent(YzContent yzContent) {
        return yzContentMapper.updateYzContent(yzContent);
    }

    /**
     * 批量删除内容管理
     * 
     * @param contentIds 需要删除的内容管理主键
     * @return 结果
     */
    @Override
    public int deleteYzContentByContentIds(Long[] contentIds)
    {
        return yzContentMapper.deleteYzContentByContentIds(contentIds);
    }

    /**
     * 删除内容管理信息
     * 
     * @param contentId 内容管理主键
     * @return 结果
     */
    @Override
    public int deleteYzContentByContentId(Long contentId) {
        return yzContentMapper.deleteYzContentByContentId(contentId);
    }

    @Override
    public int updateYzContentClick(Long contentId) {
        return yzContentMapper.updateYzContentClick(contentId);
    }


}
